package br.com.rentalcar.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.rentalcar.domain.Funcionario;
import br.com.rentalcar.factory.ConexaoFactory;

public class FuncionarioDAO {

	public void salvar(Funcionario func) throws SQLException {

		StringBuilder sql = new StringBuilder();
		sql.append("INSERT INTO funcionario ");
		sql.append("( nome, endereco, estado, telefone, dtNascimento ) ");
		sql.append("VALUES(?, ?, ?, ?, ? ) ");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comando = conexao.prepareStatement(sql.toString());

		try {

			comando.setString(1, func.getNome());
			comando.setString(2, func.getEndereco());
			comando.setString(3, func.getEstado());
			comando.setString(4, func.getTelefone());

			Date dataSql = new Date(func.getDtNascimento().getTime());
			comando.setDate(5, dataSql);
			comando.executeUpdate();
			System.out.println("Salvo com sucesso");
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERRO!!");
		}
	}

	public List<Funcionario> lista() throws SQLException {
		StringBuilder sql = new StringBuilder();

		sql.append("SELECT  f.idfuncionario, f.nome, f.endereco, f.estado, f.telefone, f.dtNascimento ");
		sql.append("FROM funcionario f ");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comando = conexao.prepareStatement(sql.toString());

		ResultSet resultado = comando.executeQuery();

		List<Funcionario> listfunc = new ArrayList<Funcionario>();

		while (resultado.next()) {

			Funcionario func = new Funcionario();

			func.setIdFuncionario(resultado.getLong("f.idfuncionario"));
			func.setNome(resultado.getString("f.nome"));
			func.setEndereco(resultado.getString("f.endereco"));
			func.setEstado(resultado.getString("f.estado"));
			func.setTelefone(resultado.getString("f.telefone"));
			func.setDtNascimento(resultado.getDate("f.dtnascimento"));
			listfunc.add(func);
		}
		return listfunc;
	}

	public void excluir(Funcionario f) throws SQLException {

		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM funcionario ");
		sql.append("WHERE idfuncionario = ? ");

		Connection conexao = ConexaoFactory.conectar();
		PreparedStatement comando = conexao.prepareStatement(sql.toString());
		comando.setLong(1, f.getIdFuncionario());
		comando.executeUpdate();
	}

	public void editar(Funcionario f) throws SQLException {
		StringBuilder sql = new StringBuilder();

		sql.append("UPDATE funcionario ");
		sql.append("SET nome = ?, endereco = ?, estado = ?, telefone = ?, dtnascimento = ? ");
		sql.append("WHERE idfuncionario = ? ");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comaando = conexao.prepareStatement(sql.toString());

		comaando.setString(1, f.getNome());
		comaando.setString(2, f.getEndereco());
		comaando.setString(3, f.getEstado());
		comaando.setString(4, f.getTelefone());
		comaando.setDate(5, new Date(f.getDtNascimento().getTime()));
		comaando.setLong(6, f.getIdFuncionario());
		comaando.executeUpdate();
	}

	public Funcionario buscaFuncionario(Long idFuncionario) {
		Funcionario f = new Funcionario();

		try {
			Connection conn = ConexaoFactory.conectar();
			PreparedStatement smt = conn
					.prepareStatement("SELECT idfuncionario, nome, endereco, estado, telefone, dtnascimento FROM funcionario WHERE idfuncionario=? ");
			smt.setLong(1, idFuncionario);
			ResultSet rs = smt.executeQuery();
			f = new Funcionario();
			while (rs.next()) {
				f.setIdFuncionario(rs.getLong(1));
				f.setNome(rs.getString(2));
				f.setEndereco(rs.getString(3));
				f.setEstado(rs.getString(4));
				f.setTelefone(rs.getString(5));
				f.setDtNascimento(rs.getDate(6));

			}

		} catch (Exception e) {
			e.printStackTrace();

		}
		return f;
	}
}
